<?php
	
	/**
	*	myPrint
	*	
	*	Вывод отладочной информации
	*	@param mixing $obj - массив, объект, строка
	*/
	function myPrint( $obj, $title='myPrint' ){
		if(!debugOut()) return;
		
		$onclick = "onclick='var sd=this.nextSibling.style.display; this.nextSibling.style.display=sd==\"\"?\"none\":\"\"'";
		echo "<div style='cursor:pointer;' ".$onclick."><b>$title ...".count($obj)."</b></div>"; 
		echo "<div style='display:none;'><pre>";
			echo "<div style='cursor:pointer;' ".$onclick."><b>print_r ...</b></div>"; 
				echo "<div style='display:'';'>"; 
					print_r($obj);
				echo "</div>";		
			echo "<div style='cursor:pointer;' ".$onclick."><b>var_dump ...</b></div>"; 
				echo "<div style='display:none;'>"; 
					var_dump($obj);
				echo "</div>";
			echo "<div style='cursor:pointer;' ".$onclick."><b>var_export ...</b></div>"; 
				echo "<div style='display:none;'>"; 
					var_export($obj);
				echo "</div>";
		echo "</pre>";
		echo "</div>";
	}
	

	/**
	*  redirect
	* 
	*  Функция перенаправления на другой url, требуется использовать до вывода данных в браузер
	*/
	if ( !function_exists('redirect') ) {

		function redirect( $url = '', $time = 0 ) {
			if ( $url == '' ) {
				$url = '/';
			}

			if ( ( strpos( strtolower( $url ), "http://" ) === FALSE ) &&
				( strpos( strtolower( $url ), "https://" ) === FALSE ) ) {

				$protocol = isset( $_SERVER['HTTPS'] ) && ( $_SERVER['HTTPS'] == 'on' ) ? 'https': 'http';

				if ( substr( $url, 0, 1 ) == '/' ) {
					$url = $protocol.'://'.$_SERVER['HTTP_HOST'].$url;
				} else {
					$url = $protocol.'://'.$_SERVER['HTTP_HOST'].'/'.$url;
				}
			}

			header( 'HTTP/1.1 303 See Other' );
			header( 'Location: '.$url );
		}
	}
	
	/**
	*  Функция перенаправления на другой url через javascript, уже после вывода данных в браузер
	*  @param string $adr - адрес
	*  @param string $doc='parent.'  для перезагрузки из фрейма например
	*/
	function redirect_js($adr, $doc='') { 
		echo '<script type="text/javascript">'.$doc.'location.replace("'.$adr.'");</script>'.
		'<noscript><meta http-equiv="refresh" content="1; url='.$adr.'"></noscript>';
		exit;
	}
	
	/**
	* _parse_url
	*	
	* Встроенный parse_url к сожалению работает не совсем корректно,
	* некоторые ссылки напрочь отказывается обрабатывать, что и привело
	* к написанию собственного парсера если встроенный не справится
	*/
	function _parse_url( $url ) {

		if ( ( $out = @parse_url( $url ) ) === false ) {

			$out = array();
			$query = "";

			if ( count( $parts = explode( "?", $url ) ) > 1 ) {
				$url = array_shift( $parts );
				$query = implode( "?", $parts );
			}

			if ( count( $parts = explode( "://", $url ) ) > 1 ) {

				if ( preg_match( '#([^A-Za-z0-9+-\.]+)#', $parts[ 0 ] ) == 0 ) {

					$out['scheme'] = array_shift( $parts );
					$url = implode( "://", $parts );

					$parts = explode( "/", $url );

					$out['host'] = array_shift( $parts );
					$url = count( $parts ) > 0 ? "/".implode( "/", $parts ) : "";

					$parts = explode( "@", $out['host'] );
					$out['host'] = array_pop( $parts );

					if ( count( $p = explode( ":", $out['host'] ) ) > 1 ) {
						$out['host'] = array_pop( $p );
						$parts = $p;
					}

					if ( ( $parts = implode( "@", $parts ) ) !== "" ) {
						$parts = explode( ":", $parts );
						$out['user'] = array_shift( $parts );
						if ( $out['user'] === "" ) {
							unset( $out['user'] );
						}

						if ( $parts = implode( ":", $parts ) ) {
							$out['pass'] = $parts;
						}
					}
				} else {
					$url = implode( "://", $parts );
				}
			}

			if ( $url !== "" ) {
				$out['path'] = $url;
			}

			if ( $query !== "" ) {
				$parts = explode( "#", $query );
				$out['query'] = array_shift( $parts );

				if ( count( $parts ) > 0 ) {
					$out['fragment'] = implode( "#", $parts );
				}
			}

		}

		return $out;
	}
	
	/*
	*  Рабивает url на части, требуеться для работы в этом сайте/движке
	*/
	function parse_uri( $url = null ) {

		$uri = parse_url( $url == null ? $_SERVER['REQUEST_URI'] : $url );
		$query = isset( $uri['query'] ) ? "?".$uri['query'] : "";
		$uri = rawurldecode( isset( $uri['path'] ) ? $uri['path'] : '/' );
		
		preg_match('#(/.*)/[^/]?#', $uri, $dir);//путь до файла  
		$file = explode( '/', $uri );//путь до файла
		$file = array_pop( $file );

		if ( preg_match( '#^[/]?([^/]+)/(.*)/$#', $uri, $out ) == 0 )
			if ( preg_match( '#^[/]?([^/]+)/(.*)$#', $uri, $out ) == 0 )
				if ( preg_match( '#^/()/(.*)/$#', $uri, $out ) == 0 )
					if ( preg_match( '#^/()/(.*)$#', $uri, $out ) == 0 )
						preg_match( '#^/(.*)()$#', $uri, $out );

		$result = array( 'module' => '', 'params' => '', 'uri' => "/".$query,
				'query'=>$query, 'path'=>'', 'dir'=>'', 'file'=>'', 
		);
		if ( count( $out ) != 0 ) {
			$result = array( 'module' => $out[ 1 ], 'params' => $out[ 2 ], 'uri' => "/".$out[ 2 ].$query,
				'query'=>$query, 'path'=>$uri, 'dir'=>$dir[1], 'file'=>$file, 
			);
		}

		return $result;
	}
	
	/**
	*	Создает массив файлов и директорий типа:
	*
	*<code>
*Array(
*    [Z:/home/zero/www/core] => Array
*        (
*            [Z:/home/zero/www/core/Auth.class.php] => Auth.class.php
*            [Z:/home/zero/www/core/Banner.class.php] => Banner.class.php
*            [Z:/home/zero/www/core/lang] => Array
*                (
*                    [Z:/home/zero/www/core/lang/russian.php] => russian.php
*                )
*		...
	*</code>
	*	@param string $dir директория
	*	@param boolean $show_files показывать файлы
	*	@param boolean $recurs флаг рекурсии
	*	@return array
	*/
	function files_array($dir, $show_files = true, $recurs = false ) {
	 $result_array = array();
	 $PS = '/';
	 if ($dh = opendir($dir)){
		while (($file = readdir($dh)) !== false) {
			if ($file=='..' || $file=='.') continue;
			
			if( $charset = mb_detect_encoding($file, "UTF-8,WINDOWS-1251") ) {
				$_file = iconv($charset, "utf-8", $file);//конвертим, а надо ли?...
			} else {
				$_file = $file;
			}
		
		// Если папка и рекурсия, входим в рекурсию
		if ( is_dir( $dir.$PS.$file ) ) {
			if( !$recurs ){
				$result_array[$dir][ $dir.$PS.$_file ]=array();
			}else {//входим в рекурсию
				$files = files_array( $dir.$PS.$file, $recurs, $show_files);
				$result_array[$dir][ $dir.$PS.$_file ]=is_array(reset($files))? reset($files) : array() ;
			}
		}
		else // Если -  файл
		if($show_files){
				$result_array[$dir][$dir.$PS.$file]=$_file;
			}
		}
		closedir($dh);
	  }
	  return $result_array;
	}
	
	function highlightHtml( $html, $return = false  ){
		$html = htmlspecialchars( $html );
		$html = nl2br( $html);
		$html = preg_replace( '/(&lt;)(.*)(&gt;)/U', 
			'<span style="color:blue">${1}</span>'.'<span style="color:red">${2}</span>'.'<span style="color:blue">${3}</span>',
		$html);
		
		if($return) return $html; else echo $html;
	}
	
	function checkAccess( $accessArr ){
		// авторизации не было, доступ закрыт	
		if( isset( $_SESSION['user'], $_SESSION['user']['access'] ) ) {
			if( count( array_intersect( $_SESSION['user']['access'], $accessArr ) )<1 ) return  false; 
				else 
			return true; 
		}
		else return  false; 
	}
	
	/**
	* создание HTML кнопочки(ссылки) на редактирования переданного файла
	* <?php if( checkAccess( array('1') ) ) echo editFileButton( __FILE__ );?>
	* @param string $_file_ путь к файлу, который требуется открыть в редакторе
	* @param string $title всплыв. подсказка HTML элемента
	* @return string HTML коде для вставки	
	*/
	function editFileButton( $_file_, $title='Редактировать...', $style='' ){//
		return '<div style="max-width:30px;position:absolute;background-color:#FFF;filter: alpha(opacity=50);opacity: 0.5;border:dashed 1px green;z-index:10000;'.$style.'">
			<a href="" onclick="this.parentNode.style.display=\'none\';return false;" title="'.Lang::get('TO_HIDE').'" style="float:right;color:red;text-decoration:none;">*</a>
			<a onclick="window.open( this.href, \'edit\', \'resizable=yes,scrollbars=yes\'); return false;" title="'.$title.'" class="edit_but" style="text-decoration:none;color:green" href="/admin/modules/content/TextFileEdit.php?file_path='.
			str_replace( _DOCUMENT_ROOT, '', str_replace(chr(92),'/', $_file_ )).'">✎</a>
		</div>';
	}
?>